package LeetCodeDemo;

import java.util.Hashtable;

/***
 * 给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target  的那 两个 整数，并返回它们的数组下标。
 *
 * 你可以假设每种输入只会对应一个答案，并且你不能使用两次相同的元素。
 *
 * 你可以按任意顺序返回答案。
 * @author Dana
 *
 */
public class LeetCode01 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7,8,9};//整数数组
        int target = 11; //目标值
        int[] targetArr = getIndexs(arr,target);
        for (int i = 0; i < arr.length; i++) {
            System.out.println("arr[" + i + "] = " + arr[i]);
        }
        if(targetArr!=null){
            System.out.printf("arr[%d]+arr[%d]=%d%n",targetArr[0],targetArr[1],target);
        }
    }

    public static int[] getIndexs(int[] arr,int target) {
        Hashtable<Integer, Integer> hash = new Hashtable<>();
        //我们创建一个哈希表，对于每一个x，我们首先查询哈希表中是否存在target-x，然后
        //将x插入到哈希表中，即可保证不会让x和自己匹配
        for (int i = 0; i < arr.length; i++) {
            if (hash.containsKey(target-arr[i])) {//查询哈希表中是否存在target-x
                return new int[]{hash.get(target-arr[i]), i}; //返回整数数组的下标
            }
            hash.put(arr[i], i);
        }
        return null;
    }

    /***
     * 最简单的用两个for循环
     */
}
